package com.aaa.newpeculiarity8.demo01;

/**
 * @author C-Q
 * @version 1.1.0
 * @Description: Lambda
     * Lambda表达式：特殊的匿名内部类，语法更简洁
     * Lambda表达式允许把函数作为一个方法的参数(函数作为方法参数传递)，将代码像数据一样传递
 * @date 2022/11/3
 */

/**
 * 下面演示使用Lambda表达式解决匿名内部类的冗余
 */
public class Test01 {
    public static void main(String[] args) {
        //构造函数需要传递一个runnable target类型的参数。而runnable它是一个接口
        /*My my = new My();
        Thread thread = new Thread(my);
        thread.start();*/

        //使用匿名内部类
      /*Runnable runnable =  new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类==");
            }
        };
      Thread thread=new Thread(runnable);
      thread.start();*/


        /*-  Thread 类需要 Runnable 接口作为参数，其中的抽象 run 方法是用来指定线程任务内容的核心
                -  为了指定 run 的方法体，不得不需要 Runnable 接口的实现类
                -  为了省去定义一个 Runnable 实现类的麻烦，不得不使用匿名内部类
                -  必须覆盖重写抽象 run 方法，所以方法名称、方法参数、方法返回值不得不再写一遍，且不能写错
                -  而实际上，似乎只有方法体才是关键所在。*/
        //使用Lambda表达式就可以解决这个问题
        Runnable r=()->{
            System.out.println("这是Lambda表达式");
        };
        Thread thread=new Thread(r);
        thread.start();
    }
}

class My implements Runnable{

    @Override
    public void run() {
        System.out.println("这是自定义接口的实现类");
    }
}